package com.xcw.test.caozuo;

/**
 * @author bhx
 * @Class P2_
 * @date 2022/11/13 2:20
 * @Description TODO
 */

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Scanner;

/**
 * 2、牛牛习惯用8位数字表示一个日期，
 * 其中，前4位代表年份，接下来2位代表月份，
 * 最后2位代表日期。牛牛想知道:
 * 在他指定的两个日期date1、date2之间(包含这两个日期本身)，
 * 有多少个真实存在的日期是回文的。(1）本题分值:30分。
 * (2)考核时间:54min。
 * (3）考核形式:上机实操
 * (4）编程语言: C/C++、Python、Java任选一种语言
 * (5）输入:
 * 第1行一个8位数表示datel。
 * 第2行1个8位数表示date2。
 * 保证datel和date2都是真实存在的日期，
 * 年份为4位数字且首位不为o，保证datel<date2。
 * (6)输出:输出一行，只包含一个整数，表示[date1, date2]之间的回文日期个数。
 * (7）样例输入:20110101   20111231
 * (8)样例输出:1
 */
public class P2_ {
        // 计算回文串
    public static boolean isPalindrome(String dates){
        int len = dates.length();
        StringBuilder app = null;
        if (len%2 == 0){
            app = new StringBuilder(dates.substring(len/2, len));
        }else {
            app = new StringBuilder(dates.substring(len/2 + 1, len));
        }
        return app.reverse().toString().equals(dates.substring(0,len/2));
    }

    public static void main(String[] args) throws ParseException {
        SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd");
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入起始时间：");
        String startString = scanner.nextLine();
        System.out.println("请输入结束时间：");
        String endString = scanner.nextLine();
        List<String> list = dateUtil(format.parse(startString),format.parse(endString));
        int count = 0;
        for (String data: list) {
           if (isPalindrome(data)){
               count++;
           }
        }
        System.out.println(count);
    }

    private static List<String> dateUtil(Date start, Date end) {

        List<String> list = new ArrayList();

        long s = start.getTime();

        long e = end.getTime();

        Long oneDay = 1000 * 60 * 60 * 24l;

        while (s <= e) {
            start = new Date(s);
            list.add(new SimpleDateFormat("yyyyMMdd").format(start));
            s += oneDay;
        }
        return list;

    }

}
